/** VAR. GLOBALI */
// canvas
var canvas;
var w, h;
var stage;

// gestione hero
var hero;

// gestione eventi da tastiera
var leftRight = false;
var changeAnimation = true;
var lastKey;

/** FUNZIONI */
/**
 * Inizializzazione dell'engine principale
 */
function init() {
	// setup della scena
	canvas = document.getElementById("engine");

	stage = new Stage(canvas);
	w = canvas.width;
	h = canvas.height;

	// frequenza animazioni
	var animationFreq = 5;
	
	// caricamento sprite
	var hero_sprite_sheet = new SpriteSheet({
		images: ["img/sprite/32x32_001.png"],
		frames: { width:32, height:32 },
		
		animations: {
			// movimento
			down:	{
				frames: [0, 2],
				next: 'down',
				frequency: animationFreq
			},
			
			left:	{
				frames: [3, 5],
				next: 'left',
				frequency: animationFreq
			},
			
			right:	{
				frames: [6, 8],
				next: 'right',
				frequency: animationFreq
			},
			
			up:	{
				frames: [9, 11],
				next: 'up',
				frequency: animationFreq
			},
			
			// stop
			s_down:		{ frames: [1] },
			s_left:		{ frames: [4] },
			s_right:	{ frames: [7] },
			s_up:		{ frames: [10] }
		}
	});

	// animazioni
	hero = new BitmapAnimation(hero_sprite_sheet);
	hero.x = Math.round(w/2);
	hero.y = h-100;
	hero.speed = 5;
	hero.v = 0;
	hero.direction = 0;
	
	// posizione iniziale dell'eroe
	hero.gotoAndPlay('s_down');

	// inserimento nello stage
	stage.addChild(hero);
	Ticker.addListener(window);
	
	// gestione input da tastiera
	loadKey();
}

/**
 * Game loop
 */
function tick() {
	// aggiornamento posizione hero
	if(leftRight) {
		// solo se resto all'interno del canvas
		var newValue = hero.x + (hero.v * hero.direction);
		if(newValue > 0 && newValue < (w - 32))
			hero.x = newValue;
	
	} else {
		// solo se resto all'interno del canvas
		var newValue = hero.y + (hero.v * hero.direction);
		if(newValue > 0 && newValue < (h - 32))
			hero.y = newValue;
	}
	 
	// aggiornamento del canvas
	stage.update();
}

/**
 * Gestione eventi da tastiera
 */
function loadKey() {
	var tastiera = new Kibo();
	
	// gestione movimento hero
	tastiera.down(['left', 'right', 'up', 'down'],function() {
		
		// condizione per aggiornare l'animazione
		if(lastKey && lastKey != tastiera.lastKey()) {
			changeAnimation = true;
		} else if(lastKey) {
			changeAnimation = false;
		}
		lastKey = tastiera.lastKey();
		
		// gestione tipo di movimento
		if(tastiera.lastKey() == 'left' || tastiera.lastKey() == 'right')
			leftRight = true;
		else
			leftRight = false;
		
		// cambio animazione
		if(changeAnimation)
			hero.gotoAndPlay(tastiera.lastKey());
		
		// update opzioni oggetto
		hero.direction = (tastiera.lastKey() == 'left' || tastiera.lastKey() == 'up' ? -1 : 1);
		hero.v = hero.speed;
		
	}).up(['left', 'right', 'up', 'down'],function() {
		// cambio animazione
		hero.gotoAndPlay('s_' + tastiera.lastKey());
		
		// valori di default
		hero.direction = 0;
		hero.v = 0;
		
	});
}